/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package org.streets.eis.ext.rbac.services;

import org.streets.eis.entity.Role;
import org.streets.eis.entity.User;
import org.streets.eis.setting.auth.UserPermitAuthorizer;
import org.streets.eis.types.PermitTarget;

/**
 *
 * @author dzb
 */
public interface RBACAuthorizer extends UserPermitAuthorizer {
	

	public static final String ROOT_USER = "root";
	
	/**
	 * 得到用户权限内机构的sql，用于自己拼接sql
	 * @param userId
	 * @return
	 */
	public String generateUserOrganPermitSql(User user);	

	/**
	 * 重新生成一个角色全部权限(从EIS_ROLE_PERMISSIONS生成所有权限表内容)
	 * @param roleId
	 */
	public void generateRoleAllPermissions(Role role);
	
	/**
	 * 重新生成一个角色指定许可目标权限(从EIS_ROLE_PERMISSIONS生成许可目标权限表内容)
	 * @param roleId
	 * @param target
	 */
	public void generateRolePermissions(Role role, PermitTarget target);	
	
	/**
	 * 删除一个角色所有的权限(包括EIS_ROLE_PERMISSIONS)
	 * @param roleId
	 */
	public boolean removeRolePermissions(Role... roles);
	
	/**
	 * 删除一个角色指定许可目标的权限(包括EIS_ROLE_PERMISSIONS)
	 * @param roleId
	 * @param target
	 */
	public boolean removeRolePermissions(Role role, PermitTarget target);

	/**
	 * 是否超级用户
	 * @return
	 */
	public boolean isRootUser(User user);
//
//	/**
//	 * 是否超级用户
//	 * @return
//	 */
//	public boolean isRootUser(String userId);	
}
